{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "####1-groupby进行汇总操作,汇总列可是是当个，也可以是一个列表\n",
    "#通过使用groupby构建了DataFrameGroupBy类型，通过这个类型可以计算各统计值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "order_df=pd.read_csv('./OrderDetails.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>OrderID</th>\n",
       "      <th>ProductID</th>\n",
       "      <th>UnitPrice</th>\n",
       "      <th>Quantity</th>\n",
       "      <th>Discount</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>10248</td>\n",
       "      <td>11</td>\n",
       "      <td>14.0</td>\n",
       "      <td>12</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>10248</td>\n",
       "      <td>42</td>\n",
       "      <td>9.8</td>\n",
       "      <td>10</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>10248</td>\n",
       "      <td>72</td>\n",
       "      <td>34.8</td>\n",
       "      <td>5</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>10249</td>\n",
       "      <td>14</td>\n",
       "      <td>18.6</td>\n",
       "      <td>9</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>10249</td>\n",
       "      <td>51</td>\n",
       "      <td>42.4</td>\n",
       "      <td>40</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   OrderID  ProductID  UnitPrice  Quantity  Discount\n",
       "0    10248         11       14.0        12       0.0\n",
       "1    10248         42        9.8        10       0.0\n",
       "2    10248         72       34.8         5       0.0\n",
       "3    10249         14       18.6         9       0.0\n",
       "4    10249         51       42.4        40       0.0"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "order_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "order_group=order_df.groupby('ProductID')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "pandas.core.groupby.generic.DataFrameGroupBy"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(order_group)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>UnitPrice</th>\n",
       "      <th>Quantity</th>\n",
       "      <th>Discount</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ProductID</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>15.840000</td>\n",
       "      <td>17.400000</td>\n",
       "      <td>0.056667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>15.912500</td>\n",
       "      <td>27.687500</td>\n",
       "      <td>0.090625</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>8.800000</td>\n",
       "      <td>34.800000</td>\n",
       "      <td>0.020000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>19.360000</td>\n",
       "      <td>29.300000</td>\n",
       "      <td>0.080000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>17.000000</td>\n",
       "      <td>32.250000</td>\n",
       "      <td>0.100000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>21.666667</td>\n",
       "      <td>35.333333</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>27.000000</td>\n",
       "      <td>23.250000</td>\n",
       "      <td>0.050000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>36.000000</td>\n",
       "      <td>43.500000</td>\n",
       "      <td>0.100000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>87.300000</td>\n",
       "      <td>18.000000</td>\n",
       "      <td>0.125000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>27.383333</td>\n",
       "      <td>20.166667</td>\n",
       "      <td>0.045833</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           UnitPrice   Quantity  Discount\n",
       "ProductID                                \n",
       "1          15.840000  17.400000  0.056667\n",
       "2          15.912500  27.687500  0.090625\n",
       "3           8.800000  34.800000  0.020000\n",
       "4          19.360000  29.300000  0.080000\n",
       "5          17.000000  32.250000  0.100000\n",
       "6          21.666667  35.333333  0.000000\n",
       "7          27.000000  23.250000  0.050000\n",
       "8          36.000000  43.500000  0.100000\n",
       "9          87.300000  18.000000  0.125000\n",
       "10         27.383333  20.166667  0.045833"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "order_group.mean()[['UnitPrice','Quantity','Discount']].head(10)     #计算各列的平均值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "77"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(order_group.groups)    #计算分组数，相当distinct操作"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "ProductID\n",
       "59    27\n",
       "31    26\n",
       "56    26\n",
       "24    25\n",
       "72    23\n",
       "60    23\n",
       "62    22\n",
       "71    22\n",
       "40    21\n",
       "75    21\n",
       "dtype: int64"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "order_group.size().sort_values(ascending=False).head(10)   #分组后，每组中的记录数，相当于count操作"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "mul_order=order_df.set_index(['OrderID','ProductID'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>UnitPrice</th>\n",
       "      <th>Quantity</th>\n",
       "      <th>Discount</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>OrderID</th>\n",
       "      <th>ProductID</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">10248</th>\n",
       "      <th>11</th>\n",
       "      <td>14.0</td>\n",
       "      <td>12</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>42</th>\n",
       "      <td>9.8</td>\n",
       "      <td>10</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>72</th>\n",
       "      <td>34.8</td>\n",
       "      <td>5</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">10249</th>\n",
       "      <th>14</th>\n",
       "      <td>18.6</td>\n",
       "      <td>9</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>51</th>\n",
       "      <td>42.4</td>\n",
       "      <td>40</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">10250</th>\n",
       "      <th>41</th>\n",
       "      <td>7.7</td>\n",
       "      <td>10</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>51</th>\n",
       "      <td>42.4</td>\n",
       "      <td>35</td>\n",
       "      <td>0.15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65</th>\n",
       "      <td>16.8</td>\n",
       "      <td>15</td>\n",
       "      <td>0.15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">10251</th>\n",
       "      <th>22</th>\n",
       "      <td>16.8</td>\n",
       "      <td>6</td>\n",
       "      <td>0.05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>57</th>\n",
       "      <td>15.6</td>\n",
       "      <td>15</td>\n",
       "      <td>0.05</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   UnitPrice  Quantity  Discount\n",
       "OrderID ProductID                               \n",
       "10248   11              14.0        12      0.00\n",
       "        42               9.8        10      0.00\n",
       "        72              34.8         5      0.00\n",
       "10249   14              18.6         9      0.00\n",
       "        51              42.4        40      0.00\n",
       "10250   41               7.7        10      0.00\n",
       "        51              42.4        35      0.15\n",
       "        65              16.8        15      0.15\n",
       "10251   22              16.8         6      0.05\n",
       "        57              15.6        15      0.05"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mul_order.head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 1000 entries, (10248, 11) to (10625, 60)\n",
      "Data columns (total 3 columns):\n",
      "UnitPrice    1000 non-null float64\n",
      "Quantity     1000 non-null int64\n",
      "Discount     1000 non-null float64\n",
      "dtypes: float64(2), int64(1)\n",
      "memory usage: 30.0 KB\n"
     ]
    }
   ],
   "source": [
    "mul_order.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>UnitPrice</th>\n",
       "      <th>Quantity</th>\n",
       "      <th>Discount</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ProductID</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>15.840000</td>\n",
       "      <td>17.400000</td>\n",
       "      <td>0.056667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>15.912500</td>\n",
       "      <td>27.687500</td>\n",
       "      <td>0.090625</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>8.800000</td>\n",
       "      <td>34.800000</td>\n",
       "      <td>0.020000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>19.360000</td>\n",
       "      <td>29.300000</td>\n",
       "      <td>0.080000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>17.000000</td>\n",
       "      <td>32.250000</td>\n",
       "      <td>0.100000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>21.666667</td>\n",
       "      <td>35.333333</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>27.000000</td>\n",
       "      <td>23.250000</td>\n",
       "      <td>0.050000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>36.000000</td>\n",
       "      <td>43.500000</td>\n",
       "      <td>0.100000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>87.300000</td>\n",
       "      <td>18.000000</td>\n",
       "      <td>0.125000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>27.383333</td>\n",
       "      <td>20.166667</td>\n",
       "      <td>0.045833</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           UnitPrice   Quantity  Discount\n",
       "ProductID                                \n",
       "1          15.840000  17.400000  0.056667\n",
       "2          15.912500  27.687500  0.090625\n",
       "3           8.800000  34.800000  0.020000\n",
       "4          19.360000  29.300000  0.080000\n",
       "5          17.000000  32.250000  0.100000\n",
       "6          21.666667  35.333333  0.000000\n",
       "7          27.000000  23.250000  0.050000\n",
       "8          36.000000  43.500000  0.100000\n",
       "9          87.300000  18.000000  0.125000\n",
       "10         27.383333  20.166667  0.045833"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mul_order.groupby(level=1).mean().head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>UnitPrice</th>\n",
       "      <th>Quantity</th>\n",
       "      <th>Discount</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>OrderID</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>10248</th>\n",
       "      <td>58.6</td>\n",
       "      <td>27</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10249</th>\n",
       "      <td>61.0</td>\n",
       "      <td>49</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10250</th>\n",
       "      <td>66.9</td>\n",
       "      <td>60</td>\n",
       "      <td>0.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10251</th>\n",
       "      <td>49.2</td>\n",
       "      <td>41</td>\n",
       "      <td>0.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10252</th>\n",
       "      <td>94.0</td>\n",
       "      <td>105</td>\n",
       "      <td>0.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10253</th>\n",
       "      <td>40.4</td>\n",
       "      <td>102</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10254</th>\n",
       "      <td>30.8</td>\n",
       "      <td>57</td>\n",
       "      <td>0.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10255</th>\n",
       "      <td>88.3</td>\n",
       "      <td>110</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10256</th>\n",
       "      <td>36.6</td>\n",
       "      <td>27</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10257</th>\n",
       "      <td>59.9</td>\n",
       "      <td>46</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         UnitPrice  Quantity  Discount\n",
       "OrderID                               \n",
       "10248         58.6        27       0.0\n",
       "10249         61.0        49       0.0\n",
       "10250         66.9        60       0.3\n",
       "10251         49.2        41       0.1\n",
       "10252         94.0       105       0.1\n",
       "10253         40.4       102       0.0\n",
       "10254         30.8        57       0.3\n",
       "10255         88.3       110       0.0\n",
       "10256         36.6        27       0.0\n",
       "10257         59.9        46       0.0"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mul_order.groupby(level=0).sum().head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index([u'UnitPrice', u'Quantity', u'Discount'], dtype='object')"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mul_order.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "#######2-合并连接\n",
    "##2-1通过concat函数\n",
    "##2-2通过append函数\n",
    "##2-3通过merge函数\n",
    "##2-4通过join函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "#caoncat\n",
    "d1=order_df.loc[2:3]\n",
    "d2=order_df.iloc[2:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>OrderID</th>\n",
       "      <th>ProductID</th>\n",
       "      <th>UnitPrice</th>\n",
       "      <th>Quantity</th>\n",
       "      <th>Discount</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>10248</td>\n",
       "      <td>72</td>\n",
       "      <td>34.8</td>\n",
       "      <td>5</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   OrderID  ProductID  UnitPrice  Quantity  Discount\n",
       "2    10248         72       34.8         5       0.0"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>OrderID</th>\n",
       "      <th>ProductID</th>\n",
       "      <th>UnitPrice</th>\n",
       "      <th>Quantity</th>\n",
       "      <th>Discount</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>10248</td>\n",
       "      <td>72</td>\n",
       "      <td>34.8</td>\n",
       "      <td>5</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>10249</td>\n",
       "      <td>14</td>\n",
       "      <td>18.6</td>\n",
       "      <td>9</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   OrderID  ProductID  UnitPrice  Quantity  Discount\n",
       "2    10248         72       34.8         5       0.0\n",
       "3    10249         14       18.6         9       0.0"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>OrderID</th>\n",
       "      <th>ProductID</th>\n",
       "      <th>UnitPrice</th>\n",
       "      <th>Quantity</th>\n",
       "      <th>Discount</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>10248</td>\n",
       "      <td>72</td>\n",
       "      <td>34.8</td>\n",
       "      <td>5</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>10249</td>\n",
       "      <td>14</td>\n",
       "      <td>18.6</td>\n",
       "      <td>9</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>10248</td>\n",
       "      <td>72</td>\n",
       "      <td>34.8</td>\n",
       "      <td>5</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   OrderID  ProductID  UnitPrice  Quantity  Discount\n",
       "2    10248         72       34.8         5       0.0\n",
       "3    10249         14       18.6         9       0.0\n",
       "2    10248         72       34.8         5       0.0"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.concat([d1,d2])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>OrderID</th>\n",
       "      <th>ProductID</th>\n",
       "      <th>UnitPrice</th>\n",
       "      <th>Quantity</th>\n",
       "      <th>Discount</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>10248</td>\n",
       "      <td>72</td>\n",
       "      <td>34.8</td>\n",
       "      <td>5</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>10249</td>\n",
       "      <td>14</td>\n",
       "      <td>18.6</td>\n",
       "      <td>9</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>10248</td>\n",
       "      <td>72</td>\n",
       "      <td>34.8</td>\n",
       "      <td>5</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   OrderID  ProductID  UnitPrice  Quantity  Discount\n",
       "2    10248         72       34.8         5       0.0\n",
       "3    10249         14       18.6         9       0.0\n",
       "2    10248         72       34.8         5       0.0"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d1.append(d2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>OrderID</th>\n",
       "      <th>ProductID_x</th>\n",
       "      <th>UnitPrice_x</th>\n",
       "      <th>Quantity_x</th>\n",
       "      <th>Discount_x</th>\n",
       "      <th>ProductID_y</th>\n",
       "      <th>UnitPrice_y</th>\n",
       "      <th>Quantity_y</th>\n",
       "      <th>Discount_y</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>10248</td>\n",
       "      <td>72</td>\n",
       "      <td>34.8</td>\n",
       "      <td>5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>72</td>\n",
       "      <td>34.8</td>\n",
       "      <td>5</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   OrderID  ProductID_x  UnitPrice_x  Quantity_x  Discount_x  ProductID_y  \\\n",
       "0    10248           72         34.8           5         0.0           72   \n",
       "\n",
       "   UnitPrice_y  Quantity_y  Discount_y  \n",
       "0         34.8           5         0.0  "
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d1.merge(d2,left_on='OrderID',right_on='OrderID')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>OrderIDd1</th>\n",
       "      <th>ProductIDd1</th>\n",
       "      <th>UnitPriced1</th>\n",
       "      <th>Quantityd1</th>\n",
       "      <th>Discountd1</th>\n",
       "      <th>OrderIDd2</th>\n",
       "      <th>ProductIDd2</th>\n",
       "      <th>UnitPriced2</th>\n",
       "      <th>Quantityd2</th>\n",
       "      <th>Discountd2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>10248</td>\n",
       "      <td>72</td>\n",
       "      <td>34.8</td>\n",
       "      <td>5</td>\n",
       "      <td>0.0</td>\n",
       "      <td>10248</td>\n",
       "      <td>72</td>\n",
       "      <td>34.8</td>\n",
       "      <td>5</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   OrderIDd1  ProductIDd1  UnitPriced1  Quantityd1  Discountd1  OrderIDd2  \\\n",
       "2      10248           72         34.8           5         0.0      10248   \n",
       "\n",
       "   ProductIDd2  UnitPriced2  Quantityd2  Discountd2  \n",
       "2           72         34.8           5         0.0  "
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d1.join(d2,lsuffix='d1',rsuffix='d2',how='inner')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "######3装置和变形\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "city_data_dict={'BeiJing' : {'2019-Q1':100000, '2019-Q2':120000, '2019-Q3':150000, '2019-Q4':180000,'region':'华北'},\n",
    "'ShangHai':{'2019-Q1':120000,'2019-Q2':140000,'2019-Q3':170000,'2019-Q4':190000,'region':'华东'},\n",
    "'GuangZhou':{'2019-Q1':90000,'2019-Q2':110000,'2019-Q3':160000,'2019-Q4':180000,'region':'华南'},\n",
    "'ShenZhen':{'2019-Q1':97000, '2019-Q2':112000, '2019-Q3':156000,'2019-Q4':187000,'region':'华南'},\n",
    "'HangZhou':{'2019-Q1':99000, '2019-Q2':102000, '2019-Q3':166000,'2019-Q4':177000,'region':'华东'},\n",
    "'ChengDu':{'2019-Q1':109000, '2019-Q2':122000, '2019-Q3':176000,'2019-Q4':197000,'region':'西南'}}\n",
    "city_data=pd.DataFrame.from_dict(city_data_dict)\n",
    "city_data_t= pd.DataFrame(city_data.values.T, index=city_data.columns, columns=city_data.index)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>2019-Q1</th>\n",
       "      <th>2019-Q2</th>\n",
       "      <th>2019-Q3</th>\n",
       "      <th>2019-Q4</th>\n",
       "      <th>region</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>BeiJing</th>\n",
       "      <td>100000</td>\n",
       "      <td>120000</td>\n",
       "      <td>150000</td>\n",
       "      <td>180000</td>\n",
       "      <td>华北</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ChengDu</th>\n",
       "      <td>109000</td>\n",
       "      <td>122000</td>\n",
       "      <td>176000</td>\n",
       "      <td>197000</td>\n",
       "      <td>西南</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GuangZhou</th>\n",
       "      <td>90000</td>\n",
       "      <td>110000</td>\n",
       "      <td>160000</td>\n",
       "      <td>180000</td>\n",
       "      <td>华南</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>HangZhou</th>\n",
       "      <td>99000</td>\n",
       "      <td>102000</td>\n",
       "      <td>166000</td>\n",
       "      <td>177000</td>\n",
       "      <td>华东</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ShangHai</th>\n",
       "      <td>120000</td>\n",
       "      <td>140000</td>\n",
       "      <td>170000</td>\n",
       "      <td>190000</td>\n",
       "      <td>华东</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ShenZhen</th>\n",
       "      <td>97000</td>\n",
       "      <td>112000</td>\n",
       "      <td>156000</td>\n",
       "      <td>187000</td>\n",
       "      <td>华南</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          2019-Q1 2019-Q2 2019-Q3 2019-Q4 region\n",
       "BeiJing    100000  120000  150000  180000     华北\n",
       "ChengDu    109000  122000  176000  197000     西南\n",
       "GuangZhou   90000  110000  160000  180000     华南\n",
       "HangZhou    99000  102000  166000  177000     华东\n",
       "ShangHai   120000  140000  170000  190000     华东\n",
       "ShenZhen    97000  112000  156000  187000     华南"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "city_data_t"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0xa9a8c50>"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "city_data_t.plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>BeiJing</th>\n",
       "      <th>ChengDu</th>\n",
       "      <th>GuangZhou</th>\n",
       "      <th>HangZhou</th>\n",
       "      <th>ShangHai</th>\n",
       "      <th>ShenZhen</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2019-Q1</th>\n",
       "      <td>100000</td>\n",
       "      <td>109000</td>\n",
       "      <td>90000</td>\n",
       "      <td>99000</td>\n",
       "      <td>120000</td>\n",
       "      <td>97000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-Q2</th>\n",
       "      <td>120000</td>\n",
       "      <td>122000</td>\n",
       "      <td>110000</td>\n",
       "      <td>102000</td>\n",
       "      <td>140000</td>\n",
       "      <td>112000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-Q3</th>\n",
       "      <td>150000</td>\n",
       "      <td>176000</td>\n",
       "      <td>160000</td>\n",
       "      <td>166000</td>\n",
       "      <td>170000</td>\n",
       "      <td>156000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-Q4</th>\n",
       "      <td>180000</td>\n",
       "      <td>197000</td>\n",
       "      <td>180000</td>\n",
       "      <td>177000</td>\n",
       "      <td>190000</td>\n",
       "      <td>187000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>region</th>\n",
       "      <td>华北</td>\n",
       "      <td>西南</td>\n",
       "      <td>华南</td>\n",
       "      <td>华东</td>\n",
       "      <td>华东</td>\n",
       "      <td>华南</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        BeiJing ChengDu GuangZhou HangZhou ShangHai ShenZhen\n",
       "2019-Q1  100000  109000     90000    99000   120000    97000\n",
       "2019-Q2  120000  122000    110000   102000   140000   112000\n",
       "2019-Q3  150000  176000    160000   166000   170000   156000\n",
       "2019-Q4  180000  197000    180000   177000   190000   187000\n",
       "region       华北      西南        华南       华东       华东       华南"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "city_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>region</th>\n",
       "      <th>华东</th>\n",
       "      <th>华北</th>\n",
       "      <th>华南</th>\n",
       "      <th>西南</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>BeiJing</th>\n",
       "      <td>None</td>\n",
       "      <td>100000</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ChengDu</th>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>109000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GuangZhou</th>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>90000</td>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>HangZhou</th>\n",
       "      <td>99000</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ShangHai</th>\n",
       "      <td>120000</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ShenZhen</th>\n",
       "      <td>None</td>\n",
       "      <td>None</td>\n",
       "      <td>97000</td>\n",
       "      <td>None</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "region         华东      华北     华南      西南\n",
       "BeiJing      None  100000   None    None\n",
       "ChengDu      None    None   None  109000\n",
       "GuangZhou    None    None  90000    None\n",
       "HangZhou    99000    None   None    None\n",
       "ShangHai   120000    None   None    None\n",
       "ShenZhen     None    None  97000    None"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#使用pivot函数：返回按给定索引/列值组织的重新构造的DataFrame。\n",
    "city_data_t.pivot(columns='region',values='2019-Q1')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "data=order_df.head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_t= pd.DataFrame(data.values.T, index=data.columns, columns=data.index)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>OrderID</th>\n",
       "      <td>10248.0</td>\n",
       "      <td>10248.0</td>\n",
       "      <td>10248.0</td>\n",
       "      <td>10249.0</td>\n",
       "      <td>10249.0</td>\n",
       "      <td>10250.0</td>\n",
       "      <td>10250.00</td>\n",
       "      <td>10250.00</td>\n",
       "      <td>10251.00</td>\n",
       "      <td>10251.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ProductID</th>\n",
       "      <td>11.0</td>\n",
       "      <td>42.0</td>\n",
       "      <td>72.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>51.0</td>\n",
       "      <td>41.0</td>\n",
       "      <td>51.00</td>\n",
       "      <td>65.00</td>\n",
       "      <td>22.00</td>\n",
       "      <td>57.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UnitPrice</th>\n",
       "      <td>14.0</td>\n",
       "      <td>9.8</td>\n",
       "      <td>34.8</td>\n",
       "      <td>18.6</td>\n",
       "      <td>42.4</td>\n",
       "      <td>7.7</td>\n",
       "      <td>42.40</td>\n",
       "      <td>16.80</td>\n",
       "      <td>16.80</td>\n",
       "      <td>15.60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Quantity</th>\n",
       "      <td>12.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>35.00</td>\n",
       "      <td>15.00</td>\n",
       "      <td>6.00</td>\n",
       "      <td>15.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Discount</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.15</td>\n",
       "      <td>0.15</td>\n",
       "      <td>0.05</td>\n",
       "      <td>0.05</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 0        1        2        3        4        5         6  \\\n",
       "OrderID    10248.0  10248.0  10248.0  10249.0  10249.0  10250.0  10250.00   \n",
       "ProductID     11.0     42.0     72.0     14.0     51.0     41.0     51.00   \n",
       "UnitPrice     14.0      9.8     34.8     18.6     42.4      7.7     42.40   \n",
       "Quantity      12.0     10.0      5.0      9.0     40.0     10.0     35.00   \n",
       "Discount       0.0      0.0      0.0      0.0      0.0      0.0      0.15   \n",
       "\n",
       "                  7         8         9  \n",
       "OrderID    10250.00  10251.00  10251.00  \n",
       "ProductID     65.00     22.00     57.00  \n",
       "UnitPrice     16.80     16.80     15.60  \n",
       "Quantity      15.00      6.00     15.00  \n",
       "Discount       0.15      0.05      0.05  "
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_t"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>OrderID</th>\n",
       "      <th>ProductID</th>\n",
       "      <th>UnitPrice</th>\n",
       "      <th>Quantity</th>\n",
       "      <th>Discount</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>10248</td>\n",
       "      <td>11</td>\n",
       "      <td>14.0</td>\n",
       "      <td>12</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>10248</td>\n",
       "      <td>42</td>\n",
       "      <td>9.8</td>\n",
       "      <td>10</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>10248</td>\n",
       "      <td>72</td>\n",
       "      <td>34.8</td>\n",
       "      <td>5</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>10249</td>\n",
       "      <td>14</td>\n",
       "      <td>18.6</td>\n",
       "      <td>9</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>10249</td>\n",
       "      <td>51</td>\n",
       "      <td>42.4</td>\n",
       "      <td>40</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>10250</td>\n",
       "      <td>41</td>\n",
       "      <td>7.7</td>\n",
       "      <td>10</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>10250</td>\n",
       "      <td>51</td>\n",
       "      <td>42.4</td>\n",
       "      <td>35</td>\n",
       "      <td>0.15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>10250</td>\n",
       "      <td>65</td>\n",
       "      <td>16.8</td>\n",
       "      <td>15</td>\n",
       "      <td>0.15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>10251</td>\n",
       "      <td>22</td>\n",
       "      <td>16.8</td>\n",
       "      <td>6</td>\n",
       "      <td>0.05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>10251</td>\n",
       "      <td>57</td>\n",
       "      <td>15.6</td>\n",
       "      <td>15</td>\n",
       "      <td>0.05</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   OrderID  ProductID  UnitPrice  Quantity  Discount\n",
       "0    10248         11       14.0        12      0.00\n",
       "1    10248         42        9.8        10      0.00\n",
       "2    10248         72       34.8         5      0.00\n",
       "3    10249         14       18.6         9      0.00\n",
       "4    10249         51       42.4        40      0.00\n",
       "5    10250         41        7.7        10      0.00\n",
       "6    10250         51       42.4        35      0.15\n",
       "7    10250         65       16.8        15      0.15\n",
       "8    10251         22       16.8         6      0.05\n",
       "9    10251         57       15.6        15      0.05"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>OrderID</th>\n",
       "      <th>10248</th>\n",
       "      <th>10249</th>\n",
       "      <th>10250</th>\n",
       "      <th>10251</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>9.8</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>34.8</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>NaN</td>\n",
       "      <td>18.6</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>NaN</td>\n",
       "      <td>42.4</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7.7</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>42.4</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>16.8</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>16.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>15.6</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "OrderID  10248  10249  10250  10251\n",
       "0         14.0    NaN    NaN    NaN\n",
       "1          9.8    NaN    NaN    NaN\n",
       "2         34.8    NaN    NaN    NaN\n",
       "3          NaN   18.6    NaN    NaN\n",
       "4          NaN   42.4    NaN    NaN\n",
       "5          NaN    NaN    7.7    NaN\n",
       "6          NaN    NaN   42.4    NaN\n",
       "7          NaN    NaN   16.8    NaN\n",
       "8          NaN    NaN    NaN   16.8\n",
       "9          NaN    NaN    NaN   15.6"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.pivot(columns='OrderID',values='UnitPrice')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.16"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
